home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 399_01 / minedmp.c < prev    next >
C/C++ Source or Header  |  1993-08-03  |  17KB  |  620 lines

  1. /*  ==================================================================    *
  2.  *                Editor mined                *
  3.  *            Command and character set mappings        *
  4.  *  ==================================================================    */
  5.  
  6. #include "mined.h"
  7.  
  8. #define iso_latin_1
  9.  
  10. #ifdef msdos
  11. #undef iso_latin_1
  12. #undef dec_sup
  13. #define pc_charset
  14. #endif
  15.  
  16. /*  ==================================================================    *
  17.  *            8 bit character constant stuff            *
  18.  *  ==================================================================    */
  19.  
  20. #ifdef pc_charset
  21. char TABdefault = 250;
  22. char SHIFT_MARK = 175;        /* Char indicating that line continues */
  23. uchar ring = 248;
  24. #else
  25. char TABdefault = '╖';
  26. char SHIFT_MARK = '╗';        /* Char indicating that line continues */
  27. uchar ring = '░';
  28. #endif
  29.  
  30. int
  31. idfchar (ch)
  32.   uchar ch;
  33. {
  34.   return ('0' <= ch && ch <= '9') ||
  35.      ('A' <= ch && ch <= 'Z') ||
  36.      ('a' <= ch && ch <= 'z') ||
  37. #ifdef pc_charset
  38.      ((uchar) '\200' <= ch && ch <= (uchar) '\232') ||
  39.      ((uchar) '\240' <= ch && ch <= (uchar) '\245') ||
  40.      ((uchar) '\340' <= ch && ch <= (uchar) '\353') ||
  41. #ifdef cp850
  42. /* Whoever wishes to include an automatic and complete (?!) handling 
  43.    of Microsoft's rotten codepage chaos, is invited to do so. */
  44.      ((uchar) '\265' <= ch && ch <= (uchar) '\267') ||
  45.      ((uchar) '\320' <= ch && ch <= (uchar) '\330') ||
  46.      (ch == (uchar) '\233') ||
  47.      (ch == (uchar) '\235') ||
  48.      (ch == (uchar) '\306') ||
  49.      (ch == (uchar) '\307') ||
  50.      (ch == (uchar) '\336') ||
  51.      (ch == (uchar) '\354') ||
  52.      (ch == (uchar) '\355') ||
  53. #endif
  54. #else
  55.      ((uchar) '\300' <= ch && ch != (uchar) '╫' && ch != (uchar) '≈') ||
  56.      (ch == (uchar) '╡') ||
  57. #endif
  58.      (ch == '_');
  59. }
  60.  
  61. /*  ==================================================================    *
  62.  *        MSDOS Video mode switching table            *
  63.  *  ==================================================================    */
  64.  
  65. struct {
  66.     int mode, cols, lins;
  67. } modetab [] =
  68. { /* list of available modes, unsorted, terminated by a '-1' mode */
  69.   /* the entries contain:
  70.     a video mode number (restriction to text modes preferable),
  71.     the numbers of columns and of lines which can be displayed 
  72.         in that mode if a font of height 16 is used */
  73.   {42, 100, 40},
  74.   {38, 80, 60},
  75.   {36, 132, 28},
  76.   {35, 132, 25},
  77.   {34, 132, 44},
  78.   { 3, 80, 25},
  79.   { 1, 40, 25},
  80.   {-1, 0, 0}
  81. };
  82.  
  83. /*  ==================================================================    *
  84.  *            Character set coding                *
  85.  *  ==================================================================    */
  86.  
  87. /*
  88.  * Determine a default diacritic character value for _readchar ().
  89.  * The characters are given literally except for the MSDOS version in order
  90.  * not to depend on the function of a character set translator.
  91.  * For all non-MSDOS platforms, ISO-Latin1 or the very similar 
  92.  * DEC-Supplemental are assumed.
  93.  * For MSDOS, characters for the "International Codepage" ("850") are 
  94.  * generated which includes the real letters (not all graphic and Greek 
  95.  * characters) of the old IBM codepage ("437") (which, by the way, some 
  96.  * time ago someone must have designed in an attack of mental sickness).
  97.  */
  98. uchar
  99. diacritic (c)
  100.   uchar c;
  101. {
  102.   /*    the following characters cannot be inserted by this function:
  103.     ⌐¬«║╝╜╛ (ISO-Latin-1) and MSDOS graphics characters */
  104.   switch (c) {
  105. #ifdef pc_charset
  106.     case 'C' : return 128;
  107.     case 'c' : return 135;
  108.     case 'N' : return 165;
  109.     case 'n' : return 164;
  110.     case 's' : return 225;
  111.     case '!' : return 173;
  112.     case '$' : return 189;
  113.     case '/' : return 189;
  114.     case 'l' : return 156;
  115.     case 'L' : return 156;
  116.     case 'Y' : return 190;
  117.     case '+' : return 241;
  118.     case '?' : return 168;
  119.     case '0' : return 248;
  120.     case '1' : return 251;
  121.     case '2' : return 253;
  122.     case '3' : return 252;
  123.     case '<' : return 174;
  124.     case '>' : return 175;
  125.     case ':' : return 246;
  126.     case 'x' : return 158;
  127.     case 'f' : return 159;
  128.     case 'D' : return 209;
  129.     case 'd' : return 208;
  130.     case 'P' : return 232;
  131.     case 'p' : return 231;
  132.     case 'i' : return 213;
  133.     case '|' : return 221;
  134.     case '&' : return 244;
  135.     case '\\' : return 170;
  136.     case '_' : return 238;
  137.     case '-' : return 196;
  138.     case 'm' : return 230;
  139.     case '=' : return 242;
  140.     case '#' : return 245;
  141.     case '.' : return 250;
  142.     case ',' : return 247;
  143.     case '\'' : return 239;
  144.     case 'X' : return 207;
  145. #else
  146.     case 'C' : return '╟';
  147.     case 'c' : return 'τ';
  148.     case 'N' : return '╤';
  149.     case 'n' : return '±';
  150.     case 's' : return '▀';
  151.     case '!' : return 'í';
  152.     case '$' : return 'ó';
  153.     case '/' : return 'ó';
  154.     case 'l' : return 'ú';
  155.     case 'L' : return 'ú';
  156.     case 'Y' : return 'Ñ';
  157.     case '+' : return '▒';
  158.     case '?' : return '┐';
  159.     case '0' : return '░';
  160.     case '2' : return '▓';
  161.     case '<' : return '½';
  162.     case '>' : return '╗';
  163.     case 'D' : return '╨';
  164.     case 'd' : return '≡';
  165.     case 'P' : return '▐';
  166.     case 'p' : return '■';
  167.     case '|' : return 'ª';
  168.     case '&' : return 'º';
  169.     case '\\' : return '¼';
  170.     case '_' : return '»';
  171.     case '-' : return '¡';
  172.     case 'm' : return '╡';
  173.     case '#' : return '╢';
  174.     case '.' : return '╖';
  175.     case '*' : return '╖';
  176.     case ',' : return '╕';
  177.     case '\'' : return '┤';
  178.     case '1' : return '╣';
  179.     case '3' : return '│';
  180. #ifdef iso_latin_1
  181.     case 'X' : return 'ñ';
  182.     case '"' : return '¿';
  183.     case 'x' : return '╫';
  184.     case ':' : return '≈';
  185. #endif
  186. #ifdef dec_sup
  187.     case 'X' : return '¿'; /* ñ */
  188. #endif
  189. #endif
  190.     default: return c;
  191.   }
  192. }
  193.  
  194. uchar
  195. grave (ch)
  196.   uchar ch;
  197. {
  198.     switch (ch) {
  199. #ifdef pc_charset
  200.         case 'A' : return 183;
  201.         case 'E' : return 212;
  202.         case 'I' : return 222;
  203.         case 'O' : return 227;
  204.         case 'U' : return 235;
  205.         case 'a' : return 133;
  206.         case 'e' : return 138;
  207.         case 'i' : return 141;
  208.         case 'o' : return 149;
  209.         case 'u' : return 151;
  210. #else
  211.         case 'A' : return '└';
  212.         case 'E' : return '╚';
  213.         case 'I' : return '╠';
  214.         case 'O' : return '╥';
  215.         case 'U' : return '┘';
  216.         case 'a' : return 'α';
  217.         case 'e' : return 'Φ';
  218.         case 'i' : return '∞';
  219.         case 'o' : return '≥';
  220.         case 'u' : return '∙';
  221. #endif
  222.         default : return diacritic (ch);
  223.     }
  224. }
  225. uchar
  226. circumflex (ch)
  227.   uchar ch;
  228. {
  229.     switch (ch) {
  230. #ifdef pc_charset
  231.         case 'A' : return 182;
  232.         case 'E' : return 210;
  233.         case 'I' : return 215;
  234.         case 'O' : return 226;
  235.         case 'U' : return 234;
  236.         case 'a' : return 131;
  237.         case 'e' : return 136;
  238.         case 'i' : return 140;
  239.         case 'o' : return 147;
  240.         case 'u' : return 150;
  241. #else
  242.         case 'A' : return '┬';
  243.         case 'E' : return '╩';
  244.         case 'I' : return '╬';
  245.         case 'O' : return '╘';
  246.         case 'U' : return '█';
  247.         case 'a' : return 'Γ';
  248.         case 'e' : return 'Ω';
  249.         case 'i' : return 'ε';
  250.         case 'o' : return '⌠';
  251.         case 'u' : return '√';
  252. #endif
  253.         default : return diacritic (ch);
  254.     }
  255. }
  256. uchar
  257. acute (ch)
  258.   uchar ch;
  259. {
  260.     switch (ch) {
  261. #ifdef pc_charset
  262.         case 'A' : return 181;
  263.         case 'E' : return 144;
  264.         case 'I' : return 214;
  265.         case 'O' : return 224;
  266.         case 'U' : return 233;
  267.         case 'a' : return 160;
  268.         case 'e' : return 130;
  269.         case 'i' : return 161;
  270.         case 'o' : return 162;
  271.         case 'u' : return 163;
  272.         case 'Y' : return 237;
  273.         case 'y' : return 236;
  274.         case ' ' : return 239;
  275. #else
  276.         case 'A' : return '┴';
  277.         case 'E' : return '╔';
  278.         case 'I' : return '═';
  279.         case 'O' : return '╙';
  280.         case 'U' : return '┌';
  281.         case 'a' : return 'ß';
  282.         case 'e' : return 'Θ';
  283.         case 'i' : return 'φ';
  284.         case 'o' : return '≤';
  285.         case 'u' : return '·';
  286.         case ' ' : return '┤';
  287. #ifdef iso_latin_1
  288.         case 'Y' : return '▌';
  289.         case 'y' : return '²';
  290. #endif
  291. #endif
  292.         default : return diacritic (ch);
  293.     }
  294. }
  295. uchar
  296. diaeresis (ch)
  297.   uchar ch;
  298. {
  299.     switch (ch) {
  300. #ifdef pc_charset
  301.         case 'A' : return 142;
  302.         case 'E' : return 211;
  303.         case 'I' : return 216;
  304.         case 'O' : return 153;
  305.         case 'U' : return 154;
  306.         case 'a' : return 132;
  307.         case 'e' : return 137;
  308.         case 'i' : return 139;
  309.         case 'o' : return 148;
  310.         case 'u' : return 129;
  311.         case 'y' : return 152;
  312.         case ' ' : return 249;
  313. #else
  314.         case 'A' : return '─';
  315.         case 'E' : return '╦';
  316.         case 'I' : return '╧';
  317.         case 'O' : return '╓';
  318.         case 'U' : return '▄';
  319.         case 'a' : return 'Σ';
  320.         case 'e' : return 'δ';
  321.         case 'i' : return '∩';
  322.         case 'o' : return '÷';
  323.         case 'u' : return 'ⁿ';
  324. #ifdef iso_latin_1
  325.         case ' ' : return '¿';
  326.         case 'y' : return '\377'; /* ' ' aborts sun compiler */
  327. #endif
  328. #ifdef dec_sup
  329.         case 'Y' : return '▌'; /* capital   */
  330.         case 'y' : return '²'; /*   */
  331. #endif
  332. #endif
  333.         default : return diacritic (ch);
  334.     }
  335. }
  336. uchar
  337. tilde (ch)
  338.   uchar ch;
  339. {
  340.     switch (ch) {
  341. #ifdef pc_chars